package br.com.kess.seguranca;

import java.io.IOException;
import java.util.regex.Pattern;

import javax.servlet.DispatcherType;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.kees.entidade.Usuario;
import br.com.kees.util.Constantes;

@WebFilter(dispatcherTypes = { DispatcherType.REQUEST }, servletNames = { "Faces Servlet" })
public class FiltroSeguranca implements Filter {

	private final String URL_ADMIN = "^/admin/(.)*";

	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {


		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) res;

		String pagina = request.getServletPath(); // caminho q esta sendo
													// acessado
		String aplicacao = request.getContextPath(); // recebendo a aplicação
														// SISKESS
		String ip = request.getHeader("X-Forwarded-For"); // recebe o cabeçalho
		request.getSession().setAttribute(Constantes.APLICACAO,
				request.getContextPath());

		if ((ip == null) || (ip.equals("")) || (ip.equals("null"))) {
			ip = request.getRemoteAddr();
		}

			boolean paginaAdmin = Pattern.matches(URL_ADMIN, pagina); // valida
																		// se 
			                                                            //a
																		// pagina
																		// esta
																		// ou
																		// nao
																		// no
																		// login,
																		// se
																		// estiver
																		// passa,
																		// se
																		// nao
																		// vai
																		// para
																		// pagina
																		// de
																		// login.

			if (paginaAdmin) {
				Usuario admin = (Usuario) request.getSession().getAttribute(
						Constantes.ADMIN_LOGADO);

				if (admin == null) {
					String url = aplicacao + Constantes.PAGINA_LOGIN_ADMIN;
					response.sendRedirect(url);
					return;
				}
			}


			System.out.println(aplicacao + "  "+Constantes.PAGINA_LOGIN_ADMIN);
		chain.doFilter(req, res); // redireciona a pagina
	}

	public void init(FilterConfig fConfig) throws ServletException {
	}

	public void destroy() {
	}
}
